#include "TableauDynamique.h"
#include "ElementTD.h"
#include <stdlib.h>
#include <stdio.h>

void initialiserTabDyn(TableauDynamique * t)
{
    t->capacite = 1;
    t->taille_utilisee = 0;
    t->ad = (ElementTD*)malloc(1*sizeof(ElementTD));

}

void testamentTabDyn(TableauDynamique *t)
{
    t->capacite = 0;
    t->taille_utilisee = 0;
    free(t->ad);
}

void affecterTabDyn(TableauDynamique *t1, const TableauDynamique *t2)
{
    int i;
    ElementTD *temp;
    temp=t2->ad;
    t1->capacite=t2->capacite;
    for(i=0;i<t2->taille_utilisee;i++)
    {
        t1->ad[i]=temp[i];
        t1->taille_utilisee++;
    }
    free(temp);
    ;
}

unsigned int tailleUtiliseeTabDyn(const TableauDynamique *t)
{
    return (t->taille_utilisee);
}

ElementTD valeurIemeElementTabDyn(const TableauDynamique *t, unsigned int i)
{
    return (t->ad[i]);
}

void afficherTabDyn(const TableauDynamique *t)
{
    int i;
    for (i=0;i<t->taille_utilisee;i++)
    {
        afficheElementTD(t->ad[i]);
    }
}

void ajouterElementTabDyn(TableauDynamique *t, ElementTD e)
{
    if(t->taille_utilisee == t->capacite)
	{
		int i;
		ElementTD *temp = t->ad;
		t->ad = (ElementTD*)malloc(2*t->capacite*sizeof(ElementTD));
		for( i=0;i< t->capacite;i++)
		{
			t->ad[i]=temp[i];
		}
		t->capacite = 2*t->capacite;
		free(temp);
	}
	t->ad[t->taille_utilisee]=e;
	t->taille_utilisee++;
}

void supprimerElementTabDyn( TableauDynamique *t, int position )
{
    int i;
    for (i=position;i<t->taille_utilisee;i++)
    {
        t->ad[i]=t->ad[i+1];
    }
    t->taille_utilisee--;
    if(t->taille_utilisee <(t->capacite)/3)
        t->capacite=(t->capacite)/3;
}

void modifierValeurIemeElementTabDyn(TableauDynamique *t, ElementTD e, unsigned int i)
{
    t->ad[i]=e;
}

void insererElementTabDyn(TableauDynamique *t, ElementTD e, unsigned int i)
{
    t->taille_utilisee++;
    t->ad[i]=e;
}


void trierTabDyn(TableauDynamique *t)
{
    ElementTD *temp;
    int i,j,indmin;
    temp=(ElementTD*)malloc(1*sizeof(ElementTD));
    for(i=0;i<t->taille_utilisee-1;i++)
    {   indmin=i;
        for(j=(i+1);j<t->taille_utilisee+1;j++)
        {
            if(t->ad[j]<t->ad[indmin])
            {
                indmin=j;
            }
        }
        temp[0] = t->ad[indmin];
       t->ad[indmin] = t->ad[i];
       t->ad[i] = temp[0];
    }
}

int rechercherElementTabDyn(const TableauDynamique *t, ElementTD e)
{
	int i;
	for(i=0; i < t->taille_utilisee; i++)
	{
	if (t->ad[i] = e)
		{
		return i;
		}
	if (t->ad[i] > e)
		{
		return -1;
		}
	}
return -1;
}

